home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
061-070
/
amok66
/
menu
/
xintui.mod
< prev
next >
Wrap
Text File
|
1993-11-04
|
6KB
|
167 lines
(* ------------------------------------------------------------------------
:Program. xIntui.
:Contents. Hilfsproceduren zum Umgang mit Intuition.
:Author. Klaus Hlawaty.
:Address. Waldhof
:Address. 3579 Schrecksbach
:History. v1.0 - 20.Nov.91
:Copyright. PD.
:Language. Oberon.
:Translator. OBERON v2.13 / OLink v2.13d
:Imports. Speed.
------------------------------------------------------------------------ *)
MODULE xIntui;
IMPORT
e : Exec,
g : Graphics,
i : Intuition,
ng : Requests,
NoGuruRq,
Speed,
str : Strings,
s : SYSTEM;
(* ======================================================================= *)
(* ========================== Proceduren ================================= *)
(* ======================================================================= *)
(* $CopyArrays- *)
PROCEDURE StrToPtr*(Text : ARRAY OF CHAR) : e.STRPTR;
(* ------------------------------------------------------------------------
:Input. Text : String.
:Output. RETURN: Zeiger auf den Speicherbereich des STRPTR's.
:Semantic. Legt einen String im Speicher ab.
:Remark. verhindert doppelte Speicherfreigabe ???
------------------------------------------------------------------------ *)
VAR
Str : e.STRPTR;
BEGIN
NEW(Str); (* := New(s.SIZE(e.STRING),e.any);*)
ng.Assert(Str # NIL, "StrToPtr: Kein RAM für den Text");
Speed.Fill(0,s.SIZE(Str^),Str^,Speed.Byte);
Speed.StrCopy(Text,Str^);
RETURN Str;
END StrToPtr;
(* $CopyArrays- *)
PROCEDURE TextToIntui*(Text : ARRAY OF CHAR;
MenuText : BOOLEAN) : i.IntuiTextPtr;
(* ------------------------------------------------------------------------
:Input. Text : String der in IntuiText gespeichert werden soll.
:Input. MenuText : FALSE = Normaler Text / TRUE = Menu-Text.
:Output. RETURN : Zeiger auf die IntuiTextStructur.
:Semantic. Erzeugt IntuiTextStructur.
------------------------------------------------------------------------ *)
VAR
Intui : i.IntuiTextPtr;
BEGIN
NEW(Intui); (* := New(s.SIZE(i.IntuiText),e.any);*)
ng.Assert(Intui # NIL, "TextToIntui: Kein RAM für IntuiTexT");
IF(MenuText)THEN
Intui.frontPen := 0 ;
Intui.backPen := 1 ;
ELSE
Intui.frontPen := 1 ;
Intui.backPen := 0 ;
END (* IF MenuText *);
Intui.drawMode := g.jam1;
Intui.leftEdge := 0 ;
Intui.topEdge := 0 ;
Intui.iTextFont := NIL ;
Intui.iText := StrToPtr(Text) ;
Intui.nextText := NIL ;
RETURN Intui;
END TextToIntui;
(* $CopyArrays- *)
PROCEDURE FillMenu* (Menu : i.MenuPtr;
Text : ARRAY OF CHAR;
leftEdge,
width : INTEGER
);
(* ------------------------------------------------------------------------
:Input. Menu : Zeiger auf 'leere' Menu-Structur.
:Input. Text : Text des Menüs.
:Input. leftEdge : Begin des Menües.
:Input. width : Breite des Menües.
:Output. Menu : Zeiger auf ausgefülltes Menu.
:Semantic. Füllt die Menü-Structur
:Remark. Wird sowohl von AddMenu als auch von InitMenu benutzt.
:Remark. Das Menu von InitMenu ist jedoch erweitert.
------------------------------------------------------------------------ *)
BEGIN
Menu^.nextMenu := NIL;
Menu^.leftEdge := leftEdge;
Menu^.topEdge := 0; (* Not used ? *)
Menu^.width := width;
Menu^.height := 0; (* Not used ? *)
Menu^.flags := {i.menuEnabled}; (* ? *)
Menu^.menuName := StrToPtr(Text);
Menu^.firstItem := NIL;
END FillMenu;
(* $CopyArrays- *)
PROCEDURE FillItem*(item : i.MenuItemPtr;
Text : ARRAY OF CHAR;
leftEdge,
topEdge,
width,
height : INTEGER;
Flags : SET;
MutualEx : LONGSET;
Command : CHAR);
(* ------------------------------------------------------------------------
:Input. item : Itemadresse wird übereicht.
:Input. Text : Text des Menü-Items.
:Input. leftEdge : Begin des Menü-Items links.
:Input. topEdge : Begin des Menü-Items oben.
:Input. width : Breite des Menü-Items.
:Input. height : Tiefe des Menü-Items.
:Input. Flags : Item-Flags.
:Input. MutualEx : MutualExclude-Bits.
:Input. Command : ShortCut.
:Input. Kennung : Kennung # 0.
:Output. item : Das Item wird gefüllt.
:Semantic. Füllt Item-Structur.
------------------------------------------------------------------------ *)
BEGIN
item.nextItem := NIL;
item.leftEdge := leftEdge;
item.topEdge := topEdge;
item.width := width;
item.height := height;
INCL(Flags,i.itemText); (* Behandle nur TextItems *)
IF(Command # "\o")THEN
INCL(Flags,i.commSeq);
END (* IF *);
item.flags := Flags;
item.mutualExclude := MutualEx;
item.itemFill := TextToIntui(Text,TRUE);
item.selectFill := NIL;
item.command := Command;
item.subItem := NIL;
END FillItem;
PROCEDURE decodeMenu*( code : INTEGER;
VAR Menu,
Item,
SubI : INTEGER);
(* ------------------------------------------------------------------------
:Input. code : aus IntuiMessage.
:Output. Menu : Nummer des Menü's [0 .. n].
:Output. Item : Nummer des Item's [0 .. n].
:Output. SubI : Nummer des SubItem's [0 .. n].
:Semantic. Decodiert den code der IntuiMessage für Menü's.
------------------------------------------------------------------------ *)
BEGIN
Menu := i.MenuNum(code);
Item := i.ItemNum(code);
SubI := i.SubNum(code);
END decodeMenu;
END xIntui.